// Package _95__岛屿的最大面积 main
// @Title _95__岛屿的最大面积
// @Description
// @Author  == 琳琳也叫王木木 ==  2022-02-17 9:28
// @Create  2022-02-17 9:28
package main

func max(a, b int) int {
	if a > b {
		return a
	}
	return b
}

// 主函数确定是不是可以开始搜索
func maxAreaOfIsland(grid [][]int) int {
	var ans int
	N := len(grid)
	for i := 0; i < len(grid); i++ {
		M := len(grid[i])
		for j := 0; j < len(grid[i]); j++ {
			if grid[i][j] == 1 {
				// 执行感染
				curArea := visit(grid, i, j, N, M)
				ans = max(curArea, ans)
			}
		}
	}
	return ans
}

// 实际开始对应的搜索
func visit(nums [][]int, i, j, n, m int) int {
	if i < 0 || j < 0 || i >= n || j >= m || nums[i][j] != 1 {
		return 0
	}
	// 将当前节点感染
	nums[i][j] = 0
	// 感染上下左右四个方向
	up := visit(nums, i-1, j, n, m)
	down := visit(nums, i+1, j, n, m)
	left := visit(nums, i, j-1, n, m)
	right := visit(nums, i, j+1, n, m)
	// 为啥要加1 因为第一个进来的节点的面积要算上
	return up + down + left + right + 1
}

// 使用栈来实现
